﻿/*
SINACOR - BMF&Bovespa
Arquivo: DivergenciaAlocacao.cs
Criado em: 30-mar-2010 10:30:28
Arquiteto Responsável: WGeneroso.prg
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.Service.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation.BusinessRules;
using Sinacor.Infra.Service.Security.Authorization;
using Sinacor.Infra.Service.Validation;
using Sinacor.Servico.Bovespa.Alocacao;
using Sinacor.Infra.Common.Validation;

namespace Sinacor.Servico.Bovespa.Alocacao.BusinessLogic 
{
	public class DivergenciaAlocacao : BaseBusinessLogic 
	{
		#region Atributos
		private int _erroObjetoNulo = 109602;
		private int _erroPermissaoAcesso = 109617;
        private ResourceAccess.DivergenciaAlocacao _divergenciaAlocacaoRA;
		#endregion

		#region Propriedades
		public int ErroObjetoNulo
		{
			get { return _erroObjetoNulo; }
			set { _erroObjetoNulo = value; }
		}

		public int ErroPermissaoAcesso
		{
			get { return _erroPermissaoAcesso; }
			set { _erroPermissaoAcesso = value; }
		}
		#endregion

        #region Construtores 
        public DivergenciaAlocacao(): base()
        {
            _divergenciaAlocacaoRA = new ResourceAccess.DivergenciaAlocacao();
        }
		#endregion Construtores

		#region Métodos

		/// <summary>
		/// Atualiza dados de ciência de divergência de alocação / realocação de negócios.
		/// </summary>
		/// <param name="entity"></param>
        public void AtualizarCienciaDivergenciaAlocacao(BusinessEntity.DivergenciaAlocacao entity)
        {
            bool retornoCheckUserAccess = AuthorizationContext.Current.CheckUserAccess("NEGO", "ORD");

            if (retornoCheckUserAccess)
            {
                if (entity != null)
                {
                    SinacorValidation validation = new SinacorValidation();
                    validation.Validate<BusinessEntity.DivergenciaAlocacao>(entity);
                    validation.Validate();
                    validation = null;

                    _divergenciaAlocacaoRA.AtualizarCienciaDivergenciaAlocacao(entity);
                }
                else
                    throw new BusinessException(ErroObjetoNulo);
            }
            else
                throw new BusinessException(ErroPermissaoAcesso);
        }

		/// <summary>
		/// Atualiza dados de ciência de divergência de alocação / realocação de negócios.
		/// </summary>
		/// <param name="entityList"></param>
		public void AtualizarCienciaDivergenciasAlocacao(List<BusinessEntity.DivergenciaAlocacao> entityList)
		{
            if (entityList != null)
            {
                IEnumerable<BusinessEntity.DivergenciaAlocacao> listaDivergencias;
                listaDivergencias = (from divergencia in entityList
                                     where divergencia.IndicadorCiencia == true
                                     select divergencia);

                foreach (BusinessEntity.DivergenciaAlocacao divergencia in listaDivergencias)
                {
                    this.AtualizarCienciaDivergenciaAlocacao(divergencia);
                }
            }
            else
                throw new BusinessException(ErroObjetoNulo);
		}

		/// <summary>
		/// Consulta lista de divergencias de alocação/realocação de negócios conforme o filtro de pesquisa.
		/// </summary>
		/// <param name="entity"></param>
		public List<BusinessEntity.DivergenciaAlocacao> ConsultarDivergenciasAlocacao(BusinessEntity.Parameter.FiltroDivergenciaAlocacao entity)
		{
            bool retornoCheckUserAccess = AuthorizationContext.Current.CheckUserAccess("NEGO", "ORD");

            if (retornoCheckUserAccess)
            {
                if (entity != null)
                {
                    return _divergenciaAlocacaoRA.ConsultarDivergenciasAlocacao(entity);
                }
                else
                    throw new BusinessException(ErroObjetoNulo);
            }
            else
                throw new BusinessException(ErroPermissaoAcesso);
		}

		#endregion
	}

}